/**
 * Framework principal com ferramentas de auxílio ao desenvolvimento.
 *
 * @class oeds
 *  @constructor
 */

var oeds = {
        textoModalFinal:"",
        tituloModalFinal:"",
        textoModalCredito:"Creditos",
        textoModalAjuda:"Ajuda",
        mediaChannel:{},
        audioLocalEstaMudo:false,
        isMediaAtualPausada:false,
        idElementoAtual:"",
        audioGlobalEstaMudo:false,
        pauseGlobalAtivo:false,
        allTweens:"",
        that:this,
        idVideoAtual:"",
        animacaoAPI: {
            transformarTempo : function(tempoObtido){
                var segundos = 0;
                try {
                    var text = tempoObtido;
                    var tempo = text.split(':');
                    var segEMili = tempo[1].split(',');
                    var segundos = parseInt(tempo[0] * 60) + parseInt(segEMili[0]) + segEMili[1] / 100;

                }catch(e){
                    segundos=99999;
                }
                return segundos;
            },
            idElementoAtual: "",
            animacoes: [],
            posicaoAnimacaoAtual: 0,
            tocarAnimacao: function (audioChannel) {
                var tempoAtual = audioChannel.get(0).currentTime;
                if (this.animacoes[this.posicaoAnimacaoAtual] != undefined) {
                    if (tempoAtual >= this.transformarTempo(this.animacoes[this.posicaoAnimacaoAtual].tempoInicial)) {
                        this.animacoes[this.posicaoAnimacaoAtual].executeAnimacao();
                        this.posicaoAnimacaoAtual++;
                    }
                }
            }
        },

        //TODO IMPORTANTE
        carregarAssetsMedia:function(legendas,animacoes, idElemento, callback){
            $("#init-menu").css('display','block');
            console.log(legendas);
            this.legendaAPI.posicaoLegendaAtual=0;
            this.animacaoAPI.posicaoAnimacaoAtual=0;
            this.animacaoAPI.idElementoAtual=idElemento;
            this.animacaoAPI.animacoes = animacoes;
            this.playMedia(idElemento)
            this.carregarComportamentos();
            this.legendaAPI.idElementoAtual = idElemento;
            this.idElementoAtual = idElemento;
            this.legendaAPI.legendas = legendas;
            var that = this;
            this.mediaChannel.on('ended',function(){
                //$("#init-menu").css('display','none');
                $("#video-control").css('display','none');
                //$("#menu-video").css('display','none');
                $("#legenda").css('display','none');
                callback();
            });

            this.mediaChannel.on('timeupdate',function(){
                var duracaoTotalMinutos= Math.floor(Math.floor(this.duration)/60);
                var duracaoTotalSegundos=Math.floor(this.duration)%60;
                var textoDuracao = "";
                if (duracaoTotalMinutos<=0){
                    textoDuracao = "0:";
                }else{
                    textoDuracao= duracaoTotalMinutos+":";
                }
                if (duracaoTotalSegundos<10&&duracaoTotalSegundos!=0){
                    textoDuracao+="0"+duracaoTotalSegundos
                }else if(duracaoTotalSegundos==0){
                    textoDuracao+='00';
                }else{
                    textoDuracao+=duracaoTotalSegundos;
                }

                $('#duracao').text(textoDuracao)
                var valorSeekBar = this.currentTime* (100 / this.duration);
                if(valorSeekBar<50) {
                    $('.fw_seek_bar_range').width(valorSeekBar * 5 - (valorSeekBar / 5)+ 6);
                }else {
                    $('.fw_seek_bar_range').width(valorSeekBar * 5 - (valorSeekBar / 5)+2);
                }

                //var tempoHorasAtual;
                var tempoMinutosAtual= Math.floor(Math.floor(this.currentTime)/60);
                var tempoSegundosAtual=Math.floor(this.currentTime)%60;
                var textoTempo = "";
                if (tempoMinutosAtual<=0){
                    textoTempo = "0:";
                }else{
                    textoTempo= tempoMinutosAtual+":";
                }
                if (tempoSegundosAtual<10&&tempoSegundosAtual!=0){
                    textoTempo+="0"+tempoSegundosAtual
                }else if(tempoSegundosAtual==0){
                    textoTempo+='00';
                }else{
                    textoTempo+=tempoSegundosAtual;
                }
                $('#seek-bar').val(valorSeekBar);
                $('#tempo-atual').text(textoTempo)
                that.legendaAPI.playLegenda(that.mediaChannel);
                that.animacaoAPI.tocarAnimacao(that.mediaChannel);
            })
        },
        carregarComportamentos:function(){
          //  TweenLite.set($('#video-control'),{
           //     y:60
            //})
            $('#content').mouseleave(function(){
                //         $('#content').css('overflow','hidden');
                TweenLite.to($('#video-control'),1, {
                    y: 60,
                    ease: 'easeOutQuart',
                    onComplete:function(){
                        //           $('#video-control').css('display','none');
                        //         $('#content').css('overflow','visible');
                    }
                })
                TweenLite.to($('#legenda'),1, {
                    y: 60,
                    ease: 'easeOutQuart'
                })
            });

            $('#content').mouseenter(function(){
                var that = this;
                // $('#video-control').css('display','block')
                TweenLite.to($('#video-control'),1, {
                    y: 0,
                    ease: 'easeOutQuart',
                    onComplete: function(){
                        //       $('#content').css('overflow','visible');
                    }
                })
                TweenLite.to($('#legenda'),1, {
                    y: 0,
                    ease: 'easeOutQuart',
                    autoAlpha:1
                })
            })
        },
        legendaAPI:{
            transformarTempo : function(tempoObtido){
                var segundos = 0;
                try {
                    var text = tempoObtido;
                    var tempo = text.split(':');
                    var segEMili = tempo[1].split(',');
                    var segundos = parseInt(tempo[0] * 60) + parseInt(segEMili[0]) + segEMili[1] / 100;

                }catch(e){
                    segundos=0;
                }
                return segundos;
            },
            idElementoAtual:"video",
            legendas:[],
            posicaoLegendaAtual:0,
            isLegendaAtivada:false,
            ligaDesligaLegenda:function(){
                this.isLegendaAtivada = !this.isLegendaAtivada;
            },


            playLegenda:function(audioChannel){
                var tempoAtual = audioChannel.get(0).currentTime;
                console.log(this.posicaoLegendaAtual);


                if(this.legendas[this.posicaoLegendaAtual]!= undefined){
                    var tempoInicialLegenda = this.transformarTempo(this.legendas[this.posicaoLegendaAtual].tempoInicial);
                    var tempoFinalLegenda = this.transformarTempo(this.legendas[this.posicaoLegendaAtual].tempoFinal);
                    console.log(tempoInicialLegenda);
                    console.log(tempoFinalLegenda);
                    console.log(tempoAtual);
                    if( tempoAtual >= tempoInicialLegenda &&
                        tempoAtual <= tempoFinalLegenda ){


                        $('#legenda > p').css('display','inline')
                        $('#legenda').css('display','block')
                        $('#legenda > p').text(this.legendas[this.posicaoLegendaAtual].texto)
                        if(!this.isLegendaAtivada){
                            $('#legenda > p').css('display','none')
                        }
                    }else if(tempoAtual <= tempoInicialLegenda){
                        $('#legenda > p').css('display','none')
                    }else{
                        this.posicaoLegendaAtual++;
                    }
                }else{
                    $('#legenda > p').css('display','none')
                }
            }
        },
        //TODO IMPORTANTE
        mediaPlayPause:function(){
            if(this.mediaChannel.get(0).paused){
                this.isMediaAtualPausada = false;
                this.mediaChannel.get(0).play();
            }else{
                this.pausar();
                this.isMediaAtualPausada = true;
            }
            $( ".fw_btn_play" ).toggleClass( 'fw_off' );
        },
        initControleVideo: function(){
            $("#content").append(
                '<div class="fw_modal"><div id="btn_fechar" style="right:2px; top:2px; width:25px; height:25px; position:absolute; color:white; cursor:pointer" onclick="oeds.ocultarModal()">X</div><div class="fw_modal_texto"></div></div>'+
                '<div id="legenda" class="fw_legenda"><p></p></div>'+

                '<div id="video-control" class="fw_video_control" >' +

                '<div id="play-pause" class="fw_btn_play" onclick="oeds.pauseResume()"></div>' +
                '<div class="fw_seek_line"><span id="tempo-atual" class="fw_seek_line_now">0:00</span>'+
                '<div id="range_control"><div class="fw_seek_bar_range" ></div> </div>'+
                '<input type="range" id="seek-bar" class="fw_seek_bar" onchange="oeds.tracking()" onmousedown="oeds.pausar(oeds.idElementoAtual)" onmouseup="oeds.playMedia(oeds.idElementoAtual)" value="0">'+
                '<span id="duracao" class="fw_seek_line_out">0:00</span></div>'+
                '<div class="fw_btn_mute" onclick="oeds.volumeOnOff()"></div>'+
                '<div class="fw_btn_legenda" onclick="oeds.legendaAPI.ligaDesligaLegenda()"></div>'+
                '</div>' +
                '<div>' +

                '<div id="menu-video" class="fw_sub_menu">' +
                '<li><a class="fw_btn_inicio" onclick="location.reload();"><i></i>INICIO</a></li>' +
                '<li><a class="fw_btn_audio" onclick="oeds.volumeOnOff()"><i></i>ÁUDIO</a></li>' +
                '<li><a class="fw_btn_tela_cheia" onclick="oeds.goFullScreen()"><i></i>TELA CHEIA</a></li>' +
                '<li><a class="fw_btn_ajuda" onclick="oeds.mostrarModal(oeds.textoModalAjuda)"><i></i>AJUDA</a></li>' +
                '<li><a class="fw_btn_credito" onclick="oeds.mostrarModal(oeds.textoModalCredito)"><i></i>CRÉDITO</a></li>' +
                    // '<li><a href="#" class="fw_btn_fechar" onclick="oeds.fecharJanela()"><i></i>FECHAR</a></li>' +
                '</div></div>' +
                '<div class="fw_btn_menu" id="init-menu" onclick="oeds.mostrarMenuVideo()"></div>' )
            //TODO http://stackoverflow.com/questions/13913637/html5-input-range-styling-before ver isso depois
            $('#menu-video').on('mouseleave',function(){
                console.log(this);
                $('#menu-video').css('display','none');
            })
            if(this.identificarBrowser().substring(0,2)=='IE'){
                //$('.fw_seek_line input[data-type="range"]').css('bottom ','160px');
                $('#seek-bar').css({'bottom':'-15px'
                });
                $('#range_control').css('display','none');
            }else if(this.identificarBrowser().substring(0,2)=='Ch'){
                console.log("teste");
                $('#seek-bar').css({'bottom':'28px',
                    'height':'3px',
                    background:'rgba(224, 222, 222, 0.57)'});


            }else{
                //$('.fw_video_control').css('bottom','7px')
                $('#seek-bar').css({'bottom':'28px',
                    'height':'3px',
                    left:'56px'});

            }
            $('#fadePause').click(function(){
                if(oeds.pauseGlobalAtivo){
                    oeds.ocultarModal();
                    oeds.pauseResume();
                }
            })
            $('.fw_modal').click(function(){
                if(oeds.pauseGlobalAtivo){
                    oeds.ocultarModal();
                    oeds.pauseResume();
                }
            })

        },

        mostrarModal: function(texto){
            $('.fw_modal').css('display','block');
            $('.fw_modal_texto').html(texto)
        },
        ocultarModal: function(){
            $('.fw_modal').css('display','none');
        },
        tracking:function(){
            var time = this.mediaChannel.get(0).duration * ($('#seek-bar').val() / 100);
            this.mediaChannel.get(0).currentTime = time;
            var tempoAtual = this.mediaChannel.get(0).currentTime;
            var that =  this;
            $.each(this.legendaAPI.legendas, function(index,obj){
                if(that.legendaAPI.transformarTempo(obj.tempoInicial)<=tempoAtual && that.legendaAPI.transformarTempo(obj.tempoFinal)>=tempoAtual){
                    console.log(JSON.stringify(obj));
                    that.legendaAPI.posicaoLegendaAtual = index;
                    return false
                }else if(that.legendaAPI.transformarTempo(obj.tempoInicial)> tempoAtual ){
                    that.legendaAPI.posicaoLegendaAtual = index-1;
                    return false
                }
            });
        },
        mostrarMenuVideo:function(){
            this.ocultarModal();


            this.pauseResume();
            if ($('#menu-video').css('display')=='block'){
                $('#menu-video').css('display','none');
            }else if(this.pauseGlobalAtivo){
                $('#menu-video').css('display','block');
            }
        },

        /**
         * Inicia as funções principais do framework.
         *
         * @method inicializar
         */
        inicializar:function(callback){
            preloader(callback);
            this.initControleVideo();
            this.redimensionar();




            window.addEventListener("resize", this.redimensionar, true);
        },
        identificarBrowser: function (){
            return navigator.sayswho= (function(){
                var ua= navigator.userAgent, tem,
                    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
                if(/trident/i.test(M[1])){
                    tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
                    return 'IE '+(tem[1] || '');
                }
                if(M[1]=== 'Chrome'){
                    tem= ua.match(/\bOPR\/(\d+)/)
                    if(tem!= null) return 'Opera '+tem[1];
                }
                M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
                if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
                return M.join(' ');
            })();

        },
        /**
         * faz com que a resolução seja obedecida de acordo com o tamanho da janela
         *
         * @method redimensionar
         */
        redimensionar: function(widthParam, heightParam) {
            if (widthParam == undefined || heightParam == undefined) {
                widthParam = 768;
                heightParam = 1024;
            }
            var ViewP = document.getElementsByTagName('html')[0],
                heigthView = window.innerHeight,
                widthView = window.innerWidth,
                factorView = Math.min(heigthView / widthParam, widthView / heightParam);
            console.log(heigthView);
       //     if (heigthView <= 768 || widthView <= 1024) {

                ViewP.style.webkitTransform = 'scale(' + factorView + ')';
                ViewP.style.transform = 'scale(' + factorView + ')';
                window.focus();
         //   }
    },
//TODO IMPORTANTE
    volumeOnOff:function(idElemento){
    $('.fw_btn_audio').toggleClass('fw_off');
    $('.fw_btn_mute').toggleClass('fw_off');
    console.log(idElemento)
    if(idElemento!= undefined) {
        console.log($('#' + idElemento).get(0).muted);
        if($('#'+idElemento).get(0).muted){
            console.log('true');
            this.volumeOn(idElemento);
        }else{
            console.log('false');
            this.volumeOff(idElemento);
        }
    }else{
        if(this.audioGlobalEstaMudo){
            this.volumeOn();
        }else{
            this.volumeOff();
        }
    }


},
goFullScreen: function() {

    var element = document.getElementById(this.idElementoAtual);
    if (element.mozRequestFullScreen) {
        element.mozRequestFullScreen();
    } else if (element.webkitRequestFullScreen) {
        element.webkitRequestFullScreen();
    }
},

/**
 * torna a página inteira muda
 * @method volumeOff
 */
//TODO IMPORTANTE
volumeOff: function(idElemento){

    console.log(idElemento);
    if(idElemento == undefined){
        this.audioGlobalEstaMudo = true;
        $('audio').each(function(){
            this.muted = true;
        })
        if(this.idElementoAtual!==""){
            this.mediaChannel.get(0).muted = true;
        }

    }else{

        this.audioLocalEstaMudo = true;
        $('#'+idElemento).get(0).muted = true;
    }

},
/**
 * Liga o som de todos os elementos
 *
 * @method volumeOn
 */
//TODO IMPORTANTE
volumeOn: function(idElemento){
    console.log('volumeOn');
    if(idElemento==undefined){
        this.audioGlobalEstaMudo = false;
        $('audio').each(function(){
            this.muted = false;
        })

        if(this.idElementoAtual!==""){
            this.mediaChannel.get(0).muted = false;
        }
        if(this.audioLocalEstaMudo){
            this.mediaChannel.get(0).muted = true;
        }

    }else{
        this.audioLocalEstaMudo= false;
        $('#'+idElemento).get(0).muted = false;
    }
},
/**
 * Toca o áudio escolhido, caso tenha outra trilha de audio tocando, essa será pausada
 *
 * @method playMedia
 * @param {String} elementId id do Audio
 */
//TODO IMPORTANTE
playMedia: function(elementId){
    console.log(this.mediaChannel);
    if(this.idElementoAtual!= elementId){
        this.idElementoAtual = elementId;

        if(Object.keys(this.mediaChannel).length>0){
            this.mediaChannel.get(0).currentTime  = 0;
            this.mediaChannel.get(0).pause();
        }
        this.mediaChannel = $('#'+elementId);
        if(this.audioGlobalEstaMudo){
            this.mediaChannel.get(0).muted = true;
        }else{
            this.mediaChannel.get(0).muted = false;
        }

        this.mediaChannel.currentTime = 0;
    }
    console.log(this.mediaChannel)
    this.mediaChannel.get(0).play();

},

/**
 * Pausa o a mídia de áudio ou vídeo, caso não seja passado nenhum parâmetro pausa todas as mídias em reprodução
 *
 * @method pausar
 * @param {String} elementoID id do elemento
 */
//TODO IMPORTANTE
pausar:function(){
    console.log(this.mediaChannel)
    this.mediaChannel.get(0).pause();
},

/**
 * Botão de pause ou resume global, funciona como uma função pause que torna inoperável a tela quando o botão é pressionado
 *
 * @method pauseResume
 */
//TODO IMPORTANTE
pauseResume:function(){
    this.allTweens=TweenLite.getTweensOf("*")
    var that = this;
    try {
        if (this.pauseGlobalAtivo) {
            $('.fw_modal_video_play').css('display','none');
            $('.fw_modal_video_play').toggleClass('fw_off');
            $('audio').each(function () {
                if (that.idElementoAtual != ""&& this.currentTime>0) {
                    console.log("audios");
                    console.log(this);
                    this.play(); // Stop playing
                }
            });
            if (this.isMediaAtualPausada) {
                this.mediaChannel.get(0).pause();
            } else if (that.idElementoAtual != "") {

                this.mediaChannel.get(0).play();
            }
            for (var prop in this.allTweens) {
                try {
                    this.allTweens[prop].play();
                } catch (e) {
                }
            }
        } else {
            $('.fw_modal_video_play').toggleClass('fw_off');
            $('.fw_modal_video_play').css('display','block');
            if (this.idElementoAtual != '') {
                this.pausar();
            }
            $('audio').each(function () {
                this.pause();
            });
            for (var prop in this.allTweens) {
                console.log(this.allTweens);

                this.allTweens[prop].pause();

            }
        }
    }catch(e){};

    this.pauseGlobalAtivo = !this.pauseGlobalAtivo;
},
playEffects:function(id){
    if(this.audioGlobalEstaMudo){
        $('#'+id).get(0).muted=true;
    }
    $('#'+id).get(0).play();
},
continuaModal:function(){
    $('#principal').css('display','none');
    $('#secundaria').css('display','block');
},
mostrarModalFinal:function(){
    $("#content").append(
        '<div id="modal" class="modal_final">' +
        '<div id="secundaria" class="modal_final"><p>Novo texto ' +
        'acabou.</p>' +
        '</div>' +
        '<div id="principal" class="modal_final"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' +
        'Maecenas placerat vitae ipsum non maximus. Mauris et auctor augue. ' +
        'Nam tincidunt volutpat massa sed pharetra. Nunc varius lectus non eros posuere, vel fringilla felis blandit. Morbi vel massa sollicitudin magna maximus sagittis. ' +
        'Fusce semper libero sed ex vestibulum, et sagittis odio dictum. ' +
        'Fusce bibendum, nulla sit amet rutrum eleifend, augue dolor vulputate nisl, at venenatis leo turpis gravida enim. ' +
        'Phasellus est mi, porta non ante quis, accumsan sagittis urna. ' +
        'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. ' +
        'Nulla non orci purus. Vestibulum posuere, magna ut facilisis ultrices, risus sapien varius nulla, et eleifend odio tortor vel sem. ' +
        'Suspendisse venenatis finibus tellus, sit amet mollis odio venenatis sit amet.' +
        ' Vestibulum pretium dui gravida ligula condimentum eleifend. ' +
        'Phasellus dictum, tortor ac mollis condimentum, dolor metus hendrerit augue, ' +
        'a molestie nisi tellus vitae mi. Nullam magna purus, dignissim in leo eget, tempor ultricies felis. Nulla tempus sed mauris quis tristique.</p>' +
        '<button onclick="oeds.continuaModal()">Ok</button></div>' +
        '' +
        '</div>')
}

}




